package com.ahwei.util;

import com.google.gson.Gson;

import javax.servlet.ServletRequest;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Map;
import java.util.Set;

/**
 * 从request中获取Json数据
 */
public class RequestJson {
    private Map<String,String> map;

    public static RequestJson create(ServletRequest request){
        RequestJson requestJson = new RequestJson();
        try {
            BufferedReader reader = request.getReader();
            Gson gson = new Gson();
            requestJson.map = gson.fromJson(reader, Map.class);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return requestJson;
    }

    /**
     * 直接用JSON数据组装对象
     * @param request
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T create(ServletRequest request,Class<T> clazz){
        try {
            BufferedReader reader = request.getReader();
            Gson gson = new Gson();
            return (T)gson.fromJson(reader, clazz);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 检查RequestJson对象是否包含数据
     * @return
     */
    public boolean isEmpty(){
        return map==null || map.isEmpty();
    }
    /**
     * 获取指定类型值
     * @param name
     * @param clazz
     * @param <T>
     * @return
     */
//    public <T> Object get(String name,Class<T> clazz){
//        Object numStr = map.get(name);
//        switch (clazz.getSimpleName()){
//            case "int":
//            case "Integer":
//                if(numStr==null||"".equals(numStr)) return 0;
//                return Integer.parseInt(numStr.toString());
//            case "long":
//            case "Long":
//                if(numStr==null||"".equals(numStr)) return 0;
//                return Long.parseLong(numStr.toString());
//            case "float":
//            case "Float":
//                if(numStr==null||"".equals(numStr)) return 0;
//                return Float.parseFloat(numStr.toString());
//            case "boolean":
//            case "Boolean":
//                if(numStr==null||"".equals(numStr)) return false;
//                return Boolean.parseBoolean(numStr.toString());
//            default:
//                return map.get(name);
//        }
//    }

    /**
     * 获取字符串类型值
     * @param name
     * @return
     */
    public String getParameter(String name){
        if (map != null) {
            return map.get(name);
        }
        return "参数为空！！！";
    }

    /**
     * 获取键列表
     * @return
     */
    public Set<String> getKeys(){
        return map.keySet();
    }


}
